// API接口封装
const { get, post, put, delete: del } = require("./request.js");

// 用户相关API
const userApi = {
  // 用户登录
  login(data) {
    return post("/auth/login", data);
  },

  // 用户注册
  register(data) {
    return post("/auth/register", data);
  },

  // 检查用户是否存在
  checkUser(data) {
    return post("/auth/check-user", data, { showLoading: false });
  },

  // 获取用户信息
  getUserInfo() {
    return get("/auth/user/info", {}, { showLoading: false });
  },

  // 更新用户信息
  updateUserInfo(data) {
    return put("/auth/user/info", data);
  },

  // 上传头像
  uploadAvatar(filePath) {
    return new Promise((resolve, reject) => {
      wx.uploadFile({
        url: getApp().globalData.baseURL + "/auth/upload-avatar",
        filePath: filePath,
        name: "file",
        header: {
          Authorization: "Bearer " + wx.getStorageSync("token"),
        },
        success: (res) => {
          try {
            const data = JSON.parse(res.data);
            resolve(data);
          } catch (error) {
            reject(error);
          }
        },
        fail: reject,
      });
    });
  },

  // 删除账号
  deleteAccount() {
    return del("/auth/user/delete", {}, { showLoading: false });
  },

  // 微信登录
  wechatLogin(data) {
    return post("/auth/wechat/login", data);
  },

  // 获取用户列表
  getUserList(params = {}) {
    return get("/users", params);
  },

  // 获取单个用户
  getUserById(id) {
    return get(`/users/${id}`);
  },

  // 创建用户
  createUser(data) {
    return post("/users", data);
  },

  // 更新用户
  updateUser(id, data) {
    return put(`/users/${id}`, data);
  },

  // 删除用户
  deleteUser(id) {
    return del(`/users/${id}`);
  },

  // 更新用户拉黑状态
  updateUserBlacklist(id, isBlacklisted) {
    return put(`/users/${id}/blacklist`, { is_blacklisted: isBlacklisted });
  },

  // 检查用户拉黑状态
  checkUserBlacklist() {
    return get("/users/check-blacklist");
  },

  // 切换用户美甲师状态
  toggleStaffStatus(id) {
    return put(`/users/${id}/staff`);
  },

  // 获取美甲师列表
  getStaffList() {
    return get("/users/staff/list");
  },
};

// 预约配置管理API
const appointmentConfigApi = {
  // 创建预约配置
  createAppointmentConfig(data) {
    return post("/appointment-configs", data);
  },

  // 更新预约配置
  updateAppointmentConfig(date, data) {
    return put(`/appointment-configs/${date}`, data);
  },

  // 获取预约配置
  getAppointmentConfig(date) {
    return get(`/appointment-configs/${date}`);
  },

  // 切换请假状态
  toggleLeaveStatus(date, isLeave, leaveReason = "") {
    return post("/appointment-configs/toggle-leave", {
      date,
      is_leave: isLeave,
      leave_reason: leaveReason,
    });
  },

  // 获取已预约的时间段
  getBookedTimeSlots(date) {
    return get(`/appointment-configs/${date}/booked-slots`);
  },

  // 取消指定日期的所有预约
  cancelAppointmentsByDate(date, reason) {
    return post("/appointment-configs/cancel-appointments", {
      date,
      reason,
    });
  },

  // 获取所有可用的预约日期
  getAvailableDates() {
    return get("/appointment-configs/available-dates");
  },

  // 设置全局美甲师人数
  setGlobalStaffCount(staffCount) {
    return post("/appointment-configs/staff-count", {
      staff_count: staffCount,
    });
  },

  // 获取全局美甲师人数
  getGlobalStaffCount() {
    return get("/appointment-configs/staff-count");
  },
};

// 预约管理API
const appointmentApi = {
  // 获取预约列表
  getAppointmentList(params = {}) {
    return get("/appointments", params);
  },

  // 获取预约列表（别名）
  getAppointments(params = {}) {
    return get("/appointments", params);
  },

  // 获取单个预约
  getAppointmentById(id) {
    return get(`/appointments/${id}`);
  },

  // 创建预约
  createAppointment(data) {
    return post("/appointments", data);
  },

  // 更新预约
  updateAppointment(id, data) {
    return put(`/appointments/${id}`, data);
  },

  // 取消预约
  cancelAppointment(id) {
    return put(`/appointments/${id}/cancel`);
  },

  // 更新预约状态
  updateAppointmentStatus(id, status) {
    return put(`/appointments/${id}/status`, { status });
  },
};

// 商品API
const productApi = {
  // 获取商品列表
  getProducts(params = {}) {
    return get("/products", params);
  },

  // 获取商品详情
  getProduct(id) {
    return get(`/products/${id}`);
  },

  // 创建商品（管理员）
  createProduct(data) {
    return post("/products", data);
  },

  // 更新商品（管理员）
  updateProduct(id, data) {
    return put(`/products/${id}`, data);
  },

  // 删除商品（管理员）
  deleteProduct(id) {
    return del(`/products/${id}`);
  },

  // 上传商品图片（管理员）
  uploadImage(filePath) {
    return new Promise((resolve, reject) => {
      const token = wx.getStorageSync("token");
      if (!token) {
        reject(new Error("请先登录"));
        return;
      }

      wx.uploadFile({
        url: `${require("../config.js").baseURL.replace(
          "/api/v1",
          ""
        )}/api/v1/products/upload`,
        filePath: filePath,
        name: "image",
        header: {
          Authorization: `Bearer ${token}`,
        },
        success: (res) => {
          try {
            const data = JSON.parse(res.data);
            if (data.code === 0) {
              resolve(data);
            } else {
              reject(new Error(data.message || "上传失败"));
            }
          } catch (error) {
            reject(new Error("解析响应失败"));
          }
        },
        fail: (error) => {
          reject(new Error("上传失败: " + error.errMsg));
        },
      });
    });
  },
};

// 用户设置API
const settingsApi = {
  // 获取用户设置字典
  getUserSettings() {
    return get("/settings/user");
  },
};

// 轮播图API
const bannerApi = {
  // 获取轮播图列表
  getBanners() {
    return get("/banners");
  },

  // 创建轮播图（管理员）
  createBanner(data) {
    return post("/banners", data);
  },

  // 获取轮播图详情（管理员）
  getBanner(id) {
    return get(`/banners/${id}`);
  },

  // 更新轮播图（管理员）
  updateBanner(id, data) {
    return put(`/banners/${id}`, data);
  },

  // 删除轮播图（管理员）
  deleteBanner(id) {
    return del(`/banners/${id}`);
  },
};

// 导出API
module.exports = {
  userApi,
  appointmentConfigApi,
  appointmentApi,
  productApi,
  bannerApi,
  settingsApi,
};
